//package com.smallkingson.ylib.net.volley;
//
//import java.io.BufferedReader;
//import java.io.File;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.InputStreamReader;
//import java.io.UnsupportedEncodingException;
//import java.nio.charset.Charset;
//import java.util.ArrayList;
//import java.util.Map;
//import java.util.concurrent.BlockingQueue;
//import java.util.concurrent.Executor;
//import java.util.concurrent.LinkedBlockingQueue;
//import java.util.concurrent.ThreadFactory;
//import java.util.concurrent.ThreadPoolExecutor;
//import java.util.concurrent.TimeUnit;
//import java.util.concurrent.atomic.AtomicInteger;
//
//import org.apache.http.HttpEntity;
//import org.apache.http.HttpResponse;
//import org.apache.http.HttpStatus;
//import org.apache.http.NameValuePair;
//import org.apache.http.client.ClientProtocolException;
//import org.apache.http.client.HttpClient;
//import org.apache.http.client.entity.UrlEncodedFormEntity;
//import org.apache.http.client.methods.HttpPost;
//import org.apache.http.entity.mime.MultipartEntity;
//import org.apache.http.entity.mime.content.FileBody;
//import org.apache.http.entity.mime.content.StringBody;
//import org.apache.http.impl.client.DefaultHttpClient;
//import org.apache.http.message.BasicNameValuePair;
//import org.apache.http.util.EntityUtils;
//
//import android.annotation.SuppressLint;
//import android.os.AsyncTask;
//import android.text.TextUtils;
//import android.util.Log;
//
//import com.android.volley_y.Response.ErrorListener;
//import com.android.volley_y.Response.Listener;
//import com.android.volley_y.VolleyError;
//import com.yorun.android.bean.Request;
//import com.yorun.android.bean.Request.Method;
//import com.yorun.android.bean.Response;
//import com.yorun.android.db.YHttpCacher;
//import com.yorun.exception.NotConnectException;
//
//public final class YHttps {
//
//	public static final int REFRESH = 0X26;
//
//	public static final int LOADMORE = 0X27;
//
//	private static final int CPU_COUNT = Runtime.getRuntime()
//			.availableProcessors();
//	private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
//	private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
//	private static final int KEEP_ALIVE = 1;
//
//	private static final ThreadFactory sThreadFactory = new ThreadFactory() {
//		private final AtomicInteger mCount = new AtomicInteger(1);
//
//		public Thread newThread(Runnable r) {
//			return new Thread(r, "YHttp #" + mCount.getAndIncrement());
//		}
//	};
//	private static final BlockingQueue<Runnable> sPoolWorkQueue = new LinkedBlockingQueue<Runnable>(
//			128);
//	public static final Executor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor(
//			CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE, TimeUnit.SECONDS,
//			sPoolWorkQueue, sThreadFactory);
//
//	public static <T> void get(final Request request) {
//
//		getJSONObject(request, null);
//	}
//
//	@SuppressLint("NewApi")
//	public static <T> void getJSONObject(final Request request,
//			final ResponseHandler responseHandler) {
//
//		// 访问数据库看看数据库有没有这个request对应的response 如果有 ，查看是否过期 如果过期
//		// 则网络请求，如果没有则直接返回
//
//		if (TextUtils.isEmpty(request.getUrl())) {
//			Yr.e("参数非法 ： request url ==null -->" + request);
//			return;
//		}
//		new AsyncTask<Object, Void, Void>() {
//			@Override
//			protected Void doInBackground(Object... params) {
//
//				String info = createInfo(request);
//				try {
//					final Response response = YHttpCacher.getResponse(request);
//
//					if (response != null) {
//
//						Yr.runOnUiThread(new Runnable() {
//
//							@Override
//							public void run() {
//
//								try {
//									request.listener.onSuccess(
//											request, response);
//								} catch (Exception e) {
//									Yr.logError(e);
//								}
//							}
//						});
//					} else {
//
//						if (!YConnects.isConnected(Yr.getContext())) {
//
//							throw new NotConnectException();
//						}
//
//						// 初始化listener
//
//						YHttpListener listener = new YHttpListener(request) {
//
//							@Override
//							public void onResponse(String response,
//									Object[] params) {
//
//								Yr.d(response);
//								if (responseHandler != null) {
//									response = responseHandler
//											.handler(response);
//								}
//
//								final Request request = (Request) params[0];
//
//								final Response r = new Response();
//								r.setAliveSecond(request.getAliveSecond());
//								r.setCacheKey(request.getCacheKey());
//								r.setOther("");
//								r.setResult(response);
//								r.setTime(System.currentTimeMillis());
//								r.setUrl(request.getUrl());
//								r.from = From.URL;
//								// 只有返回对象为json时才缓存
//								if (request.getCacheKey() != null
//										&& (r.jsonArray != null || r.jsonObject != null)) {
//									YHttpCacher.cache(r);
//								}
//								Yr.runOnUiThread(new Runnable() {
//
//									@Override
//									public void run() {
//										try {
//											request.listener
//													.onSuccess(
//															request, r);
//										} catch (Exception e) {
//											Yr.logError(e);
//											request.listener
//													.onError(e,
//															request);
//										}
//									}
//								});
//
//							}
//
//							@Override
//							public void onErrorResponse(
//									final VolleyError error, Object[] params) {
//								final Request request = (Request) params[0];
//
//								Yr.runOnUiThread(new Runnable() {
//
//									@Override
//									public void run() {
//										request.listener.onError(
//												error, request);
//									}
//								});
//							}
//						};
//
//						if (request.getMethod() == Method.GET) {
//							Yr.i("---method:get---from : URL-----" + info, 3);
//							YVolleys.requestByVolley(request.getUrl(),
//									request.getHeaders(), listener, listener);
//						} else {
//							Yr.i("---method:post---from : URL-----" + info
//									+ "   post参数：" + request.getParams(), 3);
//							// 处理post请求
//							YVolleys.post(request.getUrl(),
//									request.getHeaders(), request.getParams(),
//									listener, listener);
//						}
//					}
//				} catch (final Exception e) {
//					Yr.runOnUiThread(new Runnable() {
//
//						@Override
//						public void run() {
//
//							request.listener.onError(e, request);
//							Yr.logError(e);
//						}
//					});
//				}
//				return null;
//			}
//
//		}.executeOnExecutor(THREAD_POOL_EXECUTOR, request, responseHandler);
//	}
//
//	public static String createInfo(final Request request) {
//		return "未加密 ：" + request.getCacheKey() + " 加密后 ：" + request.getUrl();
//	}
//
//	public abstract static class YHttpListener implements Listener<String>,
//			ErrorListener {
//
//		Object[] params;
//
//		public YHttpListener(Object... params) {
//
//			this.params = params;
//		}
//
//		@Override
//		public void onResponse(String response) {
//			onResponse(response, params);
//		}
//
//		public abstract void onResponse(String response, Object[] params);
//
//		@Override
//		public void onErrorResponse(VolleyError error) {
//			onErrorResponse(error, params);
//		}
//
//		public abstract void onErrorResponse(VolleyError error, Object[] params);
//	}
//
//	public static interface ResponseHandler {
//
//		String handler(String response);
//	}
//
//	public static void clearCache() {
//
//		YHttpCacher.clearCache();
//	}
//
//	public static void clearCache(String like) {
//
//		YHttpCacher.clearCache(like);
//	}
//
//	public static String post(String url, Map<String, String> params) {
//
//		ArrayList<NameValuePair> pairs = new ArrayList<NameValuePair>();
//		HttpClient client = new DefaultHttpClient();
//		HttpPost httpPost = new HttpPost(url);
//		for (String key : params.keySet()) {
//
//			NameValuePair nameValuePair = new BasicNameValuePair(key,
//					params.get(key));
//			pairs.add(nameValuePair);
//		}
//		try {
//			HttpEntity entity = new UrlEncodedFormEntity(pairs);
//			httpPost.setEntity(entity);
//			HttpResponse response = client.execute(httpPost);
//			entity = response.getEntity();
//			return EntityUtils.toString(entity, "utf-8");
//		} catch (UnsupportedEncodingException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		} catch (ClientProtocolException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//
//		return null;
//	}
//
//	/**
//	 * 提交参数里有文件的数据
//	 *
//	 * @param url
//	 *            服务器地址
//	 * @param param
//	 *            参数
//	 * @return 服务器返回结果
//	 * @throws Exception
//	 */
//	// 发送个人头像
//	public static String post(String url, Map<String, String> param, File file)
//			throws Exception {
//
//		System.out.println(url);
//
//		HttpPost post = new HttpPost(url);
//
//		HttpClient httpClient = new DefaultHttpClient();
//
//		MultipartEntity entity = new MultipartEntity();
//
//		if (param != null && !param.isEmpty()) {
//
//			for (Map.Entry<String, String> entry : param.entrySet()) {
//
//				if (entry.getValue() != null
//
//				&& entry.getValue().trim().length() > 0) {
//
//					entity.addPart(
//							entry.obtainKey(),
//							new StringBody(
//									entry.getValue(),
//
//									Charset.forName(org.apache.http.protocol.HTTP.UTF_8)));
//				}
//			}
//		}
//		// 添加文件参数
//		if (file != null && file.exists()) {
//
//			entity.addPart("file", new FileBody(file));
//		} else {
//
//			Yr.log("文件不存在！");
//		}
//		post.setEntity(entity);
//
//		HttpResponse response = httpClient.execute(post);
//
//		int stateCode = response.getStatusLine().getStatusCode();
//
//		StringBuffer sb = new StringBuffer();
//
//		Yr.log("stateCode-->" + stateCode);
//
//		if (stateCode == HttpStatus.SC_OK) {
//
//			HttpEntity result = response.getEntity();
//
//			if (result != null) {
//
//				InputStream is = result.getContent();
//
//				BufferedReader br = new BufferedReader(
//						new InputStreamReader(is));
//
//				String tempLine;
//
//				while ((tempLine = br.readLine()) != null) {
//
//					sb.append(tempLine);
//				}
//			}
//		}
//
//		post.abort();
//
//		return sb.toString();
//	}
//
//	/**
//	 * 提交参数里有文件的数据
//	 *
//	 * @param url
//	 *            服务器地址
//	 * @param param
//	 *            参数
//	 * @return 服务器返回结果
//	 * @throws Exception
//	 */
//	// 发送个人头像
//	public static String postFile(String url, Map<String, File> param)
//			throws Exception {
//
//		System.out.println(url);
//
//		HttpPost post = new HttpPost(url);
//
//		HttpClient httpClient = new DefaultHttpClient();
//
//		MultipartEntity entity = new MultipartEntity();
//
//		if (param != null && !param.isEmpty()) {
//
//			for (Map.Entry<String, File> entry : param.entrySet()) {
//
//				if (entry.getValue() != null
//
//				&& entry.getValue().toString().trim().length() > 0) {
//
//					File file = entry.getValue();
//
//					String name = entry.obtainKey();
//
//					if (file != null && file.exists()) {
//
//						entity.addPart(name, new FileBody(file));
//					} else {
//						Yr.log("文件 " + file.toString() + " 不存在！");
//					}
//				}
//			}
//		}
//		post.setEntity(entity);
//
//		HttpResponse response = httpClient.execute(post);
//
//		int stateCode = response.getStatusLine().getStatusCode();
//
//		StringBuffer sb = new StringBuffer();
//
//		Yr.log("stateCode-->" + stateCode);
//
//		if (stateCode == HttpStatus.SC_OK) {
//
//			HttpEntity result = response.getEntity();
//
//			if (result != null) {
//
//				InputStream is = result.getContent();
//
//				BufferedReader br = new BufferedReader(
//						new InputStreamReader(is));
//
//				String tempLine;
//
//				while ((tempLine = br.readLine()) != null) {
//
//					sb.append(tempLine);
//				}
//			}
//		}
//
//		post.abort();
//
//		return sb.toString();
//	}
//
//	public static abstract class MyListener<T> implements Listener<String> {
//		int requestCode;
//		String url;
//		int other;
//
//		public MyListener(int requestCode, String url, int other) {
//			super();
//			this.requestCode = requestCode;
//			this.url = url;
//			this.other = other;
//		}
//	}
//
//	public static interface YHttpListener<T> {
//
//		void onSuccess(Request request, Response response)
//				throws Exception;
//
//		void onError(Exception e, Request request);
//	}
//
//	public static enum From {
//
//		URL, MEMORY, DISK
//	}
//}
